package main

import (
	"fmt"
)

// 空接口 --> 无约束的接口，随意实现
// 处处可用空接口 - 传参， 返回， map集合 and so on ....
type A interface{}

func show(a interface{}) {
	fmt.Printf("%v --- %T\n", a, a)
}
func main() {
	var a A
	var str = "Hello World"
	a = str
	fmt.Println(a) // Hello World ==> 字符串实现了这个接口

	// 空接口可以作为任意类型
	var b interface{}
	b = 20
	fmt.Printf("%v --- %T\n", b, b) // 20 --- int
	b = "World Hello"
	fmt.Printf("%v --- %T\n", b, b) // World Hello --- string
	// 也可以作为任意类型传参
	show("40") // 40 --- string
	show(60)   // 60 --- int

	// 类型断言  x.(type)
	var c interface{} = "100"
	// 断言false 则拿不到值
	v, ok := c.(int)
	if ok {
		fmt.Println(v, ok) // 100 true
	} else {
		fmt.Println(v, ok) // 0 false
	}

}
